package control;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.NamingException;
import model.Cartao;
import control_prd.*;
import control_cpr.*;

public class controlCompra {

    private Compra compra = new Compra();    
    private Cartao cartao = new Cartao();
    private control_cpr.Produto produto = new control_cpr.Produto();

    private String tipopesq;
    private String termopesq;
    private int qtePedido;
    private String listaCarrinho;

    public Compra getCompra() {
        if (this.compra == null) {
            this.compra = new Compra();
        }
        return this.compra;
    }

    public void setCompra(Compra compra) {
        this.compra = compra;
    }

    public Cartao getCartao() {
        if (this.cartao == null) {
            this.cartao = new Cartao();
        }
        return this.cartao;
    }

    public void setCartao(Cartao cartao) {
        this.cartao = cartao;
    }

    public control_cpr.Produto getProduto() {
        if (this.produto == null) {
            this.produto = new control_cpr.Produto();
        }
        return this.produto;
    }

    public void setProduto(control_cpr.Produto produto) {
        this.produto = produto;
    }

    public String getTermopesq() {
        return termopesq;
    }

    public void setTermopesq(String termopesq) {
        this.termopesq = termopesq;
    }

    public String getTipopesq() {
        return tipopesq;
    }

    public void setTipopesq(String tipopesq) {
        this.tipopesq = tipopesq;
    }

    public int getQtePedido() {
        return qtePedido;
    }

    public void setQtePedido(int qtePedido) {
        this.qtePedido = qtePedido;
    }

    public String getListaCarrinho() {
        return listaCarrinho;
    }

    public void setListaCarrinho(String listaCarrinho) {
        this.listaCarrinho = this.listaCarrinho + listaCarrinho;
    }

    public String validarEstoque(){

        //Utilizando os recursos do webservice
        ProdutoControleService pcs = new ProdutoControleService();
        ProdutoControle port = pcs.getProdutoControlePort();       

        return "";
    }

    public String pesquisar() throws NamingException {

            if (!termopesq.isEmpty()) {
                if (tipopesq.equals("DESC")) {
                    Consulta consulta = new Consulta();
                    consulta.setTipo(TipoConsulta.DESCRICAO);
                    consulta.setParametro(termopesq);
                    this.consultar(consulta);
                } else {
                    Consulta consulta = new Consulta();
                    consulta.setTipo(TipoConsulta.CODIGO);
                    consulta.setParametro(termopesq);
                    this.consultar(consulta);
                }

            } else {
                System.out.println("Deve ser passado um parâmetro para a pesquisa");
            }

        return "";
    }

    void consultar(Consulta consulta) throws NamingException {

        //Utilizando os recursos do webservice
        ProdutoControleService pcs = new ProdutoControleService();
        ProdutoControle port = pcs.getProdutoControlePort();

        List<control_prd.Produto> listaProdutos = port.consultarProdServWeb(consulta);

        for (control_prd.Produto produto_aux : listaProdutos) {

            this.produto.setCodigo(produto_aux.getCodigo());
            this.produto.setDescricao(produto_aux.getDescricao());
            this.produto.setPreco(produto_aux.getPreco());
            this.produto.setQtdEstoque(produto_aux.getQtdEstoque());

        }
    }

    public String inputCarrinho() throws NamingException {

        ItemCompra novoItem = new ItemCompra();

        novoItem.setProduto(produto);
        novoItem.setQuantidade(qtePedido);
        compra.getItens().add(novoItem);
        
        //Utilizando os recursos do webservice
        CompraControleService pcs = new CompraControleService();
        CompraControle port = pcs.getCompraControlePort();
        try {
            //Se retornar nulo é porque tem estoque pra atender
            if (port.verificaEstoque(compra).equalsIgnoreCase("ok")) {
                this.setListaCarrinho("Produto: " + this.getProduto().getDescricao() + " - Quantidade: " + this.getQtePedido());
            }
        } catch (Exception_Exception ex) {
            Logger.getLogger(controlCompra.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "";

    }
}
